package com.tedu.API.list;
import org.junit.Test;

import java.util.*;
/**
 * 链表实现集合 包位置 java.util
 * List接口集合---三个实现类：
 * ArrayList 实现类：数组实现
 *             特点：查询块【按照下标】，增删慢【改动下标:元素】
 *LinkedList    实现类：双向链表实现
 *             特点：查询慢【按照下标】，增删块【首尾元素块，中间元素较快】
 * ArrayList与LinkedList大部分方法一致：
 * 添加 add()  获取 get()   删除 remove()
 * size() 获取集合的总数   clear()清空集合的元素
 *
 * 不一致的方法:
 * indexOf()  lastIndexOf()
 * addFirst()  addLast()
 * removeFirst()  removeLast()
 */
public class LinkedListAPI {
    @Test
    public void testIndexOf(){
        //创建集合---双向链表集合
        List<String> list=new LinkedList<>();
        list.add("三至");
        list.add("龙虎斗");
        list.add("螺蛳粉");
        list.add("庵汤");
        /**
         * ArrayList与LinkedList通用方法
         * indexOf()  返回值: int
         * 作用：返回指定元素在集合当中第一次出现的索引位置
         *      【理解：返回元素的下标位】
         *
         */
        int index=list.indexOf("庵汤");
        /**
         * LinkedList独有的方法
         * LastLindexOf()  返回值：返回最后元素在集合当中出现的索引位置
         *
         */
        int lastIndex=list.lastIndexOf("庵汤");
        System.out.println(" "+index+"返回最后元素的下标"+lastIndex);
    }
    /**
     * LinkedList独有方法
     * addFirst()   返回值 void
     * 作用：将指定元素添加至链表的头部
     * addLast()   返回值 void
     * 作用：将指定元素添加至链表的底部
     * removeFirst()
     * removeLast()
     */
    @Test
    public void testAR(){
        List<String> list=new LinkedList<>();
        list.add("三至");
        list.add("龙虎斗");
        list.add("螺蛳粉");
        list.add("庵汤");
        //LinkedList独有方法
        ((LinkedList)list).addFirst("榴莲");
        ((LinkedList)list).addLast("豆汁");
        System.out.println("双向链表"+list);
        ((LinkedList)list).removeFirst();
        System.out.println("双向链表"+list);

    }
}
